package com.company;

import com.company.memento.CareTaker;
import com.company.memento.GateStatus;
import com.company.memento.Memento;
import com.company.memento.Originator;

/**
 * 备忘录设计模式测试代码
 */
public class TestForMemento {

    public static void main(String[] args) {
        //创建发起者
        Originator originator = new Originator();

        System.out.println("正在玩第一关");
        originator.setGateStatus(new GateStatus("第一关游戏"));
        System.out.println("通过了第一关，正在玩第二关");
        originator.setGateStatus(new GateStatus("第二关游戏"));

        //创建管理者
        CareTaker careTaker = new CareTaker();

        //执行游戏存档操作(即保存了游戏在第二关时的状态)
        careTaker.add(originator.saveGateStatus());
        System.out.println("游戏存档");

        System.out.println("通过了第二关，正在玩第三关");
        originator.setGateStatus(new GateStatus("第三关游戏"));

        //执行游戏存档操作(即保存了游戏在第三关时的状态)
        careTaker.add(originator.saveGateStatus());
        System.out.println("游戏存档");

        System.out.println("通过了第三关，正在玩第四关");
        originator.setGateStatus(new GateStatus("第四关游戏"));

        System.out.println("=============================");

        //列出所有的游戏存档
        System.out.println("所有的游戏存档：");
        for (Memento memento: careTaker.list()) {
            System.out.println(memento.getGateStatus().getLevel());
        }

        System.out.println("=============================");

        System.out.println("当前正在玩: " + originator.getGateStatus().getLevel());

        System.out.println("=============================");

        //恢复到第二关游戏
        originator.recoverGateStatus(careTaker.get(0));
        System.out.println("恢复到第一次存档");
        System.out.println("当前正在玩: " + originator.getGateStatus().getLevel());

    }
}
